// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

#ifndef _VSOP_H_
#define _VSOP_H_

#include "vector.h"
#include "Orbit.h"
#include "OrbitSolver.h"

struct VSOPTerm;
struct VSOPSeries;

class VSOP87Orbit : public Orbit
{
private:
    VSOPSeries* vsX;
    int nX;
    VSOPSeries* vsY;
    int nY;
    VSOPSeries* vsZ;
    int nZ;
	//double period;
public:
	VSOP87Orbit(VSOPSeries* _vsX, int _nX, VSOPSeries* _vsY, int _nY, VSOPSeries* _vsZ, int _nZ, double _period);
	VECTOR computePosition(double jd);
	//double getPeriod() { return period; }
	GravBody* parent;
};

class VSOP87Solver: public OrbitSolver
{
public:
	VSOP87Solver() {}
	Orbit* getOrbit(std::string name);
};



#endif